package ems_lib

// 品类信息
type ST_Category struct {
	Id          int32  // 品类id
	Name        string // 品类名称
	Id_parent   int32  // 父品类id
	Desc        string // 品类描述
	Time_Create uint64 // 创建时间
	Time_change uint64 // 修改时间
}

// ST_Project 项目信息
type ST_Project struct {
	Id          string      // 项目id
	Name        string      // 项目名称
	Code        string      // 项目编码
	Address     string      // 项目地址
	Longitude   float64     // 经度
	Latitude    float64     // 纬度
	Enable      ENUM_ENABLE // 启用禁用
	Desc        string      // 项目描述信息
	Time_Create uint64      // 创建时间
	Time_change uint64      // 修改时间
}

// 终端信息
type ST_EMS struct {
	Id          string      // 终端id
	Id_project  string      // 所属项目id
	Name        string      // 项目名称
	Enable      ENUM_ENABLE // 启用禁用
	Desc        string      // 项目描述信息
	Time_Create uint64      // 创建时间
	Time_change uint64      // 修改时间
}

// 驱动信息
type ST_Driver struct {
	Id             string // 驱动id
	FileName       string // 文件名称
	Name           string // 显示名称
	ID_Category    int32  // 品类id
	Category       string // 品类名称
	Brand          string // 品牌
	Model          string // 型号
	Version        string // 驱动版本号
	Author         string // 驱动开发者
	Date_pub       string // 发布日期
	Protoc         string // 协议名称
	Protoc_version string // 协议版本
	Desc           string // 项目描述信息
	Time_Create    uint64 // 创建时间
	Time_change    uint64 // 修改时间
}

// 变压器信息
type ST_Transform struct {
	Id          int     // 变压器id
	Id_project  string  // 所属项目id、
	Code        string  // 变压器编号
	Name        string  // 变压器名称
	Id_parent   int     // 父变压器id
	Capacity    float32 // 变压器容量
	Desc        string  // 项目描述信息
	Time_Create uint64  // 创建时间
	Time_change uint64  // 修改时间
}

// 驱动实例信息
type ST_DriverInstance struct {
	Id                string      // id
	Id_driver         string      // 所属驱动id
	Id_EMS            string      // 所属终端id
	Connect_parameter string      // 连接参数
	Timeout           int         // 通讯超时时间（毫秒）
	span_retry        float32     // 重试间隔
	max_retry         int32       // 重试次数
	Enable            ENUM_ENABLE // 使能标识
	Desc              string      // 项目描述信息
	Time_Create       uint64      // 创建时间
	Time_change       uint64      // 修改时间
}

// 设备信息基类
type ST_Device struct {
	Id                 int              //  设备id
	Identify           string           // 设备标识
	Name               string           // 设备名称
	id_driver_instance string           // 驱动实例id
	Decice_type        ENUM_DEVICE_TYPE // 实体设备或虚拟设备，默认为实体设备
	Addr               string           // 设备连接地址
	Enable             ENUM_ENABLE      // 启用禁用标识
	Desc               string           // 项目描述信息
	Time_Create        uint64           // 创建时间
	Time_change        uint64           // 修改时间

}

// 设备信息（配置侧）
type ST_Device_config struct {
	ST_Device
	Id_transform      int32                     // 变压器id
	Id_Category       int32                     // 设备品类id
	SLice_Tags        []*ST_TAG_config          // 设备中的点位信息
	Map_id2tags       map[int]*ST_TAG_config    // 设备中的点位信息，使用tagid索引
	Map_identify2Tags map[string]*ST_TAG_config // 设备中的点位信息，使用identify索引
}

// 设备信息（运行侧）
type ST_Device_runtime struct {
	ST_Device
	SLice_Tags        []*ST_TAG_runtime          // 设备中的点位信息
	Map_id2Tags       map[int]*ST_TAG_runtime    // 设备中的点位信息，使用tagid索引
	Map_identify2Tags map[string]*ST_TAG_runtime // 设备中的点位信息，使用identify索引

	Num_Failed  int32              // 通讯失败次数
	Enum_status ENUM_DEVICE_STATUS // 设备的在线状态
}

// 上传策略
type ST_UPLOAD_Tactics struct {
	Upload_tactics ENUM_UPLOAD_TYPE `json:"upload_tactics"` // 上传策略
	Span_Upload    int32            `json:"span_upload"`    // 上送周期，单位毫秒
	Span_change    float32          `json:"span_change"`    // 变动幅度，当上送策略为变送时，f_span默认为0
	// 当上送策略为步长上送时，f_span默认为5
	// 当上送策略为百分比上送时，f_span默认为5
}

// 寄存器信息
type ST_REG struct {
	Reg_Type ENUM_REG_TYPE // 寄存器数据类型
	Addr     string        // 寄存器地址
}

// 点位信息基类
type ST_TAG struct {
	Id        int32             //tagid
	Id_Device int32             // 设备id
	Identify  string            // 点位标识
	Name      string            // 点位名称
	Data_Type ENUM_TAGDATA_TYPE // 点位数据类型

	Time_Create uint64 // 创建时间
	Time_change uint64 // 修改时间
}

// 点位信息（配置侧）
type ST_TAG_config struct {
	ST_TAG
	TAG_Type       ENUM_TAG_TYPE     //点位类型，实点或虚点
	OBJ_Reg        ST_REG            // 寄存器信息
	Val_max        string            // 最大值
	Val_min        string            // 最小值
	Val_default    string            // 默认值
	Val_trans      Value             // 传输值，用于采集或者控制
	RW             ENUM_RW_TYPE      // 读写属性
	Span_collect   int               // 采集频率，单位毫秒
	Tag_Change     ENUM_TAG_CHANGE   // 变化规律
	Upload_Tactics ST_UPLOAD_Tactics // 上送策略
	Desc           string            // 描述信息
	Enable         ENUM_ENABLE       // 使能信息
	Decimals       int32             // 保留小数位数
}

// 点位信息（运行侧）
type ST_TAG_runtime struct {
	ST_TAG
	Val_Collect  Value             // 当前采集值
	Val_last     Value             // 变动前的值
	Data_Quality ENUM_DATA_QUALITY // 当前数据质量
	Time_Collect uint64            // 当前采集时间戳
	Time_start   uint64            // 当前值第一次出现的时间戳
}
